#include "main.h"

void* coord_thread(void *arg)
{
	int ret,i;
	int filefd;
	char byte;//保存从二进制文件读到的字节
	list_pnode new;//链队列的新节点

	/*线程分离*/
	pthread_detach(pthread_self());

	/*打开二进制数据文件*/
	filefd = open("ttyS.dat",O_RDONLY);//只读方式打开
	if(filefd < 0)
	{
		perror("open ttyS.dat");
		return NULL;
	}

	/*循环读取文件的一个字节，并判断同步头*/
	while(1)
	{
		START:
		ret = read(filefd, &byte, 1);
		if(ret == 0)
		{
			lseek(filefd, 0, SEEK_SET);//读到文件末尾就回到文件开头
			goto START;
		}
		if (byte != '#') 	goto START;
		ret = read(filefd, &byte, 1);
		if(ret == 0)
		{
			lseek(filefd, 0, SEEK_SET);//读到文件末尾就回到文件开头
			goto START;
		}
		if (byte != '#') 	goto START;
		ret = read(filefd, &byte, 1);
		if(ret == 0)
		{
			lseek(filefd, 0, SEEK_SET);//读到文件末尾就回到文件开头
			goto START;
		}
		if (byte != 'I') 	goto START;
		ret = read(filefd, &byte, 1);
		if(ret == 0)
		{
			lseek(filefd, 0, SEEK_SET);//读到文件末尾就回到文件开头
			goto START;
		}
		if (byte != 'D') 	goto START;
		ret = read(filefd, &byte, 1);
		if(ret == 0)
		{
			lseek(filefd, 0, SEEK_SET);//读到文件末尾就回到文件开头
			goto START;
		}
		if (byte != 'T') 	goto START;
		ret = read(filefd, &byte, 1);
		if(ret == 0)
		{
			lseek(filefd, 0, SEEK_SET);//读到文件末尾就回到文件开头
			goto START;
		}
		if (byte != 'H') 	goto START;

		/*接下来的7个字节是有效数据*/
		for(i = 0;i < 7;i++)
			read(filefd, &validdata[i], 1);

		/*解析数据*/
		vdata_to_msg();
		msg_to_info();
		info_to_quedata();

		/*把解析后的数据放进链队列中*/
		new = malloc(sizeof(list_node));
		bzero(new->data,size);
		strcpy(new->data,quedata);
		pthread_mutex_lock(&mutex);//上锁
		linkqueue_in(pque,new);
		pthread_cond_signal(&cond);//通知等待队列的线程
		pthread_mutex_unlock(&mutex);//释放锁
		
		sleep(1);
	}

	close(filefd);
	return NULL;
}

